 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VentaElectrodomesticos.Login;
using VentaElectrodomesticos.AbmEmpleado;
using VentaElectrodomesticos.AbmRol;
using VentaElectrodomesticos.AbmUsuario;
using VentaElectrodomesticos.AsignacionStock;
using VentaElectrodomesticos.Facturacion;
using VentaElectrodomesticos.EfectuarPago;
using VentaElectrodomesticos.TableroControl;
using VentaElectrodomesticos.ClientesPremium;
using VentaElectrodomesticos.MejoresCategorias;
using VentaElectrodomesticos.GUI.AbmEmpleado;
using VentaElectrodomesticos.GUI.AbmRol;
using VentaElectrodomesticos.GUI.AbmUsuario;
using VentaElectrodomesticos.GUI.AbmCliente;
using VentaElectrodomesticos.GUI.AbmProducto;
using VentaElectrodomesticos.Contrato;
using VentaElectrodomesticos.Datos;
using VentaElectrodomesticos.Negocio;

namespace VentaElectrodomesticos
{
    public partial class FrmPrincipal : Form
    {
        private int childFormNumber = 0;

        private Sesion session;

        public FrmPrincipal()
        {
            InitializeComponent();
        }

        private void ShowNewForm(object sender, EventArgs e)
        {
            Form childForm = new Form();
            childForm.MdiParent = this;
            childForm.Text = "Window " + childFormNumber++;
            childForm.Show();
        }

        private void ExitToolsStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frmPrincipal_Load(object sender, EventArgs e)
        {
            FormLogin login = new FormLogin();
            login.ShowDialog();

            if (login.getResult() == DialogResult.OK)
            {
                session = Sesion.getInstance();
                session.Usuario = new UsuarioNegocio().getById(login.usuario);
                session.funcionalidades = new FuncionalidadNegocio().getByUsuario(session.Usuario);
                updateMenu();
            }
            else 
            {
                if (login.invalidPasswordIntentos == 3) {
                    new UsuarioNegocio().disable(login.tUser.Text);
                }
                Application.Exit();
            }
        }

        private void aBMDeEmpleadoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormAbmEmpleado abmEmp = FormAbmEmpleado.getInstance();
            abmEmp.MdiParent = this;
            abmEmp.Show();
        }

        private void aBMDeRolToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormAbmRol abmRol = FormAbmRol.getInstance();
            abmRol.MdiParent = this;
            abmRol.Show();
        }

        private void aBMDeUsuarioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormAbmUsuario abmUser = FormAbmUsuario.getInstance();
            abmUser.MdiParent = this;
            abmUser.Show();
        }

        private void aBMDeClienteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormAbmCliente abmCliente = FormAbmCliente.getInstance();
            abmCliente.MdiParent = this;
            abmCliente.Show();
        }

        private void aBMDeProductoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormAbmProducto abmProducto = FormAbmProducto.getInstance();
            abmProducto.MdiParent = this;
            abmProducto.Show();
        }

        private void tableroDeControlToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TableroControl.FormTableroControl tablero = FormTableroControl.getInstance();
            tablero.MdiParent = this;
            tablero.Show();
        }

        private void clientesPremiumToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ClientesPremium.FormClientesPremium clientesPremium = FormClientesPremium.getInstance();
            clientesPremium.MdiParent = this;
            clientesPremium.Show();
        }

        private void mejoresCategoríasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MejoresCategorias.FormMejoresCategorias mejores = FormMejoresCategorias.getInstance();
            mejores.MdiParent = this;
            mejores.Show();
        }

        private void asignaciónDeStockToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AsignacionStock.FormAsignacionStock asignacion = FormAsignacionStock.getInstance();
            asignacion.MdiParent = this;
            asignacion.Show();
        }

        private void facturaciónToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Facturacion.FormFacturacion fact = FormFacturacion.getInstance();
            fact.MdiParent = this;
            fact.Show();
        }

        private void efectuarPagoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            EfectuarPago.FormEfectuarPago efectuar = FormEfectuarPago.getInstance();
            efectuar.MdiParent = this;
            efectuar.Show();
        }

        private void updateMenu() {
            this.mejoresCategoríasToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Categoria");
            this.clientesPremiumToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Premium");
            this.tableroDeControlToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Control");
            this.efectuarPagoToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Pago");
            this.facturaciónToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Facturacion");
            this.asignaciónDeStockToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Stock");
            this.aBMDeProductoToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Producto");
            this.aBMDeClienteToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Cliente");
            this.aBMDeUsuarioToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Usuario");
            this.aBMDeRolToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Rol");
            this.aBMDeEmpleadoToolStripMenuItem.Visible = Sesion.getInstance().hasCredential("Empleado");
        }
    }
}
